#ifndef MATRIXUTILS_H
#define MATRIXUTILS_H

#include "LangUtils.h"
#include "SkMatrix.h"
#include "CxxUtils.h"

class MatrixUtils 
{
public:
	static void toMatrix(DoArray *array, float mat[6]) { 
		for(int i = 0; i < 6; i++) {
			mat[i] = _DoObject::toNumber(array->get(i))->getReal();
		}
	}
	
	static SkMatrix toMatrix(float src[6]) {
		SkMatrix mat;
		
        mat.set(0, src[0]);
        mat.set(1, src[2]);
        mat.set(2, src[4]);
        mat.set(3, src[1]);
        mat.set(4, src[3]);
        mat.set(5, src[5]);
        mat.set(6, 0);
        mat.set(7, 0);
        mat.set(8, 1.0f);

		return mat;	
	}
	
	static void toArray(const SkMatrix &mat, float dst[6]) {
		dst[0] = mat.get(0);
		dst[2] = mat.get(1);
		dst[4] = mat.get(2);
		dst[1] = mat.get(3);
		dst[3] = mat.get(4);
		dst[5] = mat.get(5);	
	}
	
	static CRefPtr< _DoObject > toArray(float matrix[6]) {
		DoArray *array = new DoArray();
		
		for(int i = 0; i < 6; i++) {
			array->add(_DoObject::newNumber(matrix[i]));
		}
		
		return CRefPtr< _DoObject >(array);
	}
	
	static CRefPtr< _DoObject > identity() {
		float idt[] = {1, 0, 0, 1, 0, 0};
		return toArray(idt);
	}
};

#endif
